Python - シーケンス
·2 分
目次
この投稿は、Pythonで値が連続しているデータタイプであるシーケンス(sequence types)について説明するために作成されました。
シーケンスとは? #
シーケンス型(sequence types)とは、値が連続しているデータタイプを指します。 シーケンス型の最大の特徴は、共通の動作と機能を提供する点です。
リスト [1, 2, 3, 4, 5] | [1, 2, 3, 4, 5] |
---|---|
タプル (1, 2, 3, 4, 5) | (1, 2, 3, 4, 5) |
range range(5) | 0, 1, 2, 3, 4 |
文字列 ‘Hello’ | H e l l o |
このように、シーケンスにはリスト、タプル、range、文字列があり、(bytes, bytearray)もこれに該当します。
シーケンスで作成されたオブジェクトをシーケンスオブジェクトと呼び、各々の値を要素(element)と言います。
シーケンスオブジェクト内の特定の値の確認 #
シーケンスオブジェクト内に特定の値があるか確認するためには、以下のようにinまたはnot inを使用できます。
>>> a = "Hello"
>>> "H" in a
True
>>> "A" in a
False
# not in 特定の値がないか確認
>>> "ell" not in a
False
>>> "Python" not in a
True
in 演算子を使用した場合、特定の値があれば True、なければ Falseが返され、逆に not in 演算子を使用した場合、特定の値がなければ True、あれば Falseが返されます。
シーケンスオブジェクトの連結 #
シーケンスオブジェクトは + 演算子を使用して連結できます。
>>> a = [0, 1, 2, 3]
>>> b = [4, 5, 6]
>>> a + b
[0, 1, 2, 3, 4, 5, 6]
ただし、 range는 + 演算子でオブジェクトを連結できません。
>>> range(0, 5) + range(5, 10)
TypeError Traceback (most recent call last)
<ipython-input-7-88e74efcb3c0> in <cell line: 1>()
----> 1 range(0, 5) + range(5, 10)
TypeError: unsupported operand type(s) for +: 'range' and 'range'
したがって、rangeをタプルやリストに変換して連結することが可能です。
>>> tuple(range(0, 5)) + tuple(range(5, 10))
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
>>> list(range(0, 5)) + list(range(5, 10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
シーケンスオブジェクトの繰り返し #
シーケンスオブジェクトは*演算子を使用して繰り返すことができます。 整数 * シーケンスオブジェクトまたはシーケンス * 整数で繰り返し可能です。
>>> [0, 1, 2, 3] * 3
[0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]
しかし、シーケンスオブジェクトの連結方法と同様に、rangesは * 演算子を使用して繰り返すことはできません。
>>> range(0,10) * 3
TypeError Traceback (most recent call last)
<ipython-input-11-824dcf3cff8f> in <cell line: 1>()
----> 1 range(0,10) * 3
TypeError: unsupported operand type(s) for *: 'range' and 'int'
したがって、タプルやリストに変換して繰り返しは可能です。
シーケンスオブジェクトの要素数の確認 #
シーケンスオブジェクトの要素数は len 関数を使用して確認できます。
# リスト
>>> a = [1, 2, 3, 4, 5]
>>> len(a)
5
# タプル
>>> b = (6, 7, 8, 9, 10)
>>> len(b)
5
# range
len(range(0, 5, 2)) # -> 0から5まで2ずつ増やして 0, 2, 4
3
# 文字列
>>> c = "Hello, World"
>>> len(c)
12